﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using Tipler.DataSetler;
using Tipler.Enumlar;
using Tipler.OzellikTipleri;
using Tipler.Siniflar;
using System.Data;
using IsKurallari.Tanimlama;
using IsKurallari.Yetki;
using System.Data.SqlTypes;


namespace TapuKadastroWeb
{
    [YetkiAttribute(EnumSayfaYetkileri.Herkes_Yetkili)]
    public partial class IlKatsayiGiris : BasePage
    {
        #region Özellikler

        private int SecilenIlKaysayiID
        {
            get { return (int)Session["SecilenIlKaysayiID"]; }
            set { Session["SecilenIlKaysayiID"] = value; }
        }
        private IlKatsayiDataSet IlKatsayiListesi
        {
            get { return (IlKatsayiDataSet)Session["IlKatsayiListesi"]; }
            set { Session["IlKatsayiListesi"] = value; }
        }

        #endregion

        #region Sayfa Başlangıç

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                ucBaslamaTarihiARA.Tarih = DateTime.Now.AddYears(-1);
                ucBitisTarihiARA.Tarih   = DateTime.Now;
                //ucBaslamaTarihi.Tarih    = DateTime.Now;
                ucYeniBaslamaTarihi.Tarih= DateTime.Now;
                //ucBitisTarihi.Tarih      = DateTime.Now.AddYears(1);
                SecilenIlKaysayiID       = -1;
                IlKatsayiListesi = null;
                IlKatsayiListele();
                mv.SetActiveView(vListe);
                //ListDoldurFromDS(CachePage.IlGetir(), ddlIlID, "IlAdi", "IlID", ListeIlkYazı.Seçiniz);
            }
        }

        #endregion

        #region Private Metodlar

        private void IlKatsayiListele()
        {
            SecilenIlKaysayiID = -1;

            //TODO : CachePageden Gelecek.

            YetkiIsKurali oYetki = new YetkiIsKurali();
            IlKatsayiListesi = oYetki.IlKatSayilariniGetir(ucBaslamaTarihiARA.Tarih, ucBitisTarihiARA.Tarih).Sonuc;

            grdIlKatsayiListe.DataSource = IlKatsayiListesi;
            grdIlKatsayiListe.DataBind();
            if (grdIlKatsayiListe.Rows.Count > 0)
                MesajGoster(Page, grdIlKatsayiListe.Rows.Count+ " Kayıt bulundu.", MesajTipiEnum.Basari);
        }

        private void FormTemizle()
        {
            //ddlIlID.ClearSelection();
            //ucKatsayi.Clear();
            //ucBaslamaTarihi.Clear();
            //ucBitisTarihi.Clear();

            SecilenIlKaysayiID = -1;
        }

        private void FormDoldur()
        {
            //IlKatsayiDataSet.IlKatsayiRow dr = IlKatsayiListesi.IlKatsayi.FindByIlKaysayiID(SecilenIlKaysayiID);
            //YetkiIsKurali oYetki = new YetkiIsKurali();
            //ddlIlID.DataSource = oYetki.IlAdlariniGetir().Sonuc;
            //ddlIlID.SelectedIndex = SecilenIlKaysayiID-1;
            //ddlIlID.DataBind();
            //ucKatsayi.OndalikSayi = dr.Katsayi;
            //ucBaslamaTarihi.Tarih = dr.BaslamaTarihi;
            //if (!dr.IsBitisTarihiNull()) ucBitisTarihi.Tarih = dr.BitisTarihi; else ucBitisTarihi.Clear();
        }

        #endregion

        #region Olay Metodları

        protected void btnKaydet_Click(object sender, EventArgs e)
        {
            IlKatsayiDataSet.IlKatsayiRow drIlKatsayi;
            if (IlKatsayiListesi == null) IlKatsayiListesi = new IlKatsayiDataSet();

            if (SecilenIlKaysayiID == -1)
            {
                drIlKatsayi = IlKatsayiListesi.IlKatsayi.NewIlKatsayiRow();

                drIlKatsayi.IlKaysayiID = YeniIDGetir(new IlKatsayiDataSet().IlKatsayi.TableName);
            }
            else
            {
                drIlKatsayi = IlKatsayiListesi.IlKatsayi.FindByIlKaysayiID(SecilenIlKaysayiID);
            }

            //drIlKatsayi.IlID = Convert.ToByte(ddlIlID.SelectedValue);
            //drIlKatsayi.Katsayi = ucKatsayi.OndalikSayi;
            //drIlKatsayi.BaslamaTarihi = ucBaslamaTarihi.Tarih;
            //if (ucBitisTarihi.Tarih != DateTime.MinValue) drIlKatsayi.BitisTarihi = ucBitisTarihi.Tarih; else drIlKatsayi.SetBitisTarihiNull();

            if (SecilenIlKaysayiID == -1)
                IlKatsayiListesi.IlKatsayi.AddIlKatsayiRow(drIlKatsayi);

            if (IlKatsayiListesi.HasChanges())
            {
                TanimlamaIsKurali oTanimlama = new TanimlamaIsKurali();
                FonksiyonSonuc<Boolean> oSonuc = oTanimlama.IlKatsayiKaydet((IlKatsayiDataSet)IlKatsayiListesi.GetChanges());
                if (oSonuc.HataVarMi)
                {
                    IlKatsayiListesi.RejectChanges();
                    throw new Exception(oSonuc.Hata);
                }
                IlKatsayiListesi.AcceptChanges();
            }

            IlKatsayiListele();
            FormTemizle();
            mv.SetActiveView(vListe);
            MesajGoster(Page, "IlKatsayi bilgisi başarıyla kaydedilmiştir", MesajTipiEnum.Basari);
        }

        protected void btnYeniKayit_Click(object sender, EventArgs e)
        {
            FormTemizle();
            //mv.SetActiveView(vKayit);
        }

        protected void btnGecerlileriListele_Click(object sender, EventArgs e)
        {
            YetkiIsKurali oYetki = new YetkiIsKurali();
            IlKatsayiListesi = oYetki.GecerliIlKatSayilariniGetir().Sonuc;

            grdIlKatsayiListe.DataSource = IlKatsayiListesi;
            grdIlKatsayiListe.DataBind();
            if(grdIlKatsayiListe.Rows.Count >0 )
                MesajGoster(Page, grdIlKatsayiListe.Rows.Count + " Kayıt bulundu.", MesajTipiEnum.Basari);
        }

        protected void btnListele_Click(object sender, EventArgs e)
        {
            IlKatsayiListele();
        }

        protected void btnGeri_Click(object sender, EventArgs e)
        {
            SecilenIlKaysayiID = -1;
            mv.SetActiveView(vListe);
        }

        protected void grdIlKatsayiListe_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName != "Page")
            {
                int rowIndex = Convert.ToInt32(e.CommandArgument);
                int id = Convert.ToInt32(grdIlKatsayiListe.DataKeys[rowIndex].Value.ToString());

                if (e.CommandName == "duzenle")
                {
                    FormTemizle();
                    SecilenIlKaysayiID = id;
                    FormDoldur();
                    //mv.SetActiveView(vKayit);
                }
                if (e.CommandName == "sil")
                {
                    IlKatsayiDataSet.IlKatsayiRow drIlKatsayi = IlKatsayiListesi.IlKatsayi.FindByIlKaysayiID(id);
                    drIlKatsayi.Delete();

                    if (IlKatsayiListesi.HasChanges())
                    {
                        TanimlamaIsKurali oTanimlama = new TanimlamaIsKurali();
                        FonksiyonSonuc<Boolean> oSonuc = oTanimlama.IlKatsayiKaydet((IlKatsayiDataSet)IlKatsayiListesi.GetChanges());
                        if (oSonuc.HataVarMi)
                        {
                            IlKatsayiListesi.RejectChanges();
                            throw new Exception(oSonuc.Hata);
                        }
                        IlKatsayiListesi.AcceptChanges();
                    }

                    IlKatsayiListele();
                    FormTemizle();
                    mv.SetActiveView(vListe);
                    MesajGoster(Page, "IlKatsayi bilgisi başarıyla silinmiştir.", MesajTipiEnum.Basari);
                }
            }
        }

        protected void ddlIlID_SelectedIndexChanged(object sender, EventArgs e)
        {
            //TODO buraya il ismine göre veritabanından almak daha uygun
            //SecilenIlKaysayiID = ddlIlID.SelectedIndex + 1;
            //IlKatsayiDataSet.IlKatsayiRow seciliIl= IlKatsayiListesi.IlKatsayi.FindByIlKaysayiID(SecilenIlKaysayiID);
            //if (ddlIlID.SelectedIndex != -1)
            //{
            //    ucKatsayi.OndalikSayi = seciliIl.Katsayi;
            //    ucBaslamaTarihi.Tarih = seciliIl.BaslamaTarihi;
            //    if (!seciliIl.IsBitisTarihiNull()) 
            //        ucBitisTarihi.Tarih = seciliIl.BitisTarihi; 
            //    else ucBitisTarihi.Clear();
            //}
            //else
            //{
            //}
        }

        protected void grdIlKatsayiListe_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                IlKatsayiDataSet.IlKatsayiRow dr = (IlKatsayiDataSet.IlKatsayiRow)((DataRowView)(e.Row.DataItem)).Row;
                TextBox katsayi = (TextBox)e.Row.FindControl("ucKatsayiRow");
                katsayi.Text = dr.Katsayi.ToString(); 
            }
        }

        protected void grdIlKatsayiListe_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            grdIlKatsayiListe.DataSource = IlKatsayiListesi;
            grdIlKatsayiListe.PageIndex = e.NewPageIndex;
            grdIlKatsayiListe.DataBind();
        }
        #endregion

        protected void btnTumunuGuncelle_Click(object sender, EventArgs e)
        {
            if (IlKatsayiListesi == null) IlKatsayiListesi = new IlKatsayiDataSet();
            IlKatsayiListesi.Clear();
            YetkiIsKurali oYetki = new YetkiIsKurali();
            //IlKatsayiListesi = oYetki.IlKatSayilariniGetir().Sonuc;

            int eskiKatsayiBitir = 0;
            eskiKatsayiBitir = oYetki.OncekiIlKatsayilariBitir(DateTime.Now.AddDays(-1));
            if (eskiKatsayiBitir < 1) return;
            int eklenen = 0;
            IlKatsayiDataSet.IlKatsayiRow drIlKatsayi;
            foreach (GridViewRow row in grdIlKatsayiListe.Rows)
            {
                if (row.RowType == DataControlRowType.DataRow)
                {
                    Double katsayi = Convert.ToDouble(row.Cells[SutunSirasiGetir(grdIlKatsayiListe, "Katsayı")].Controls.OfType<TextBox>().FirstOrDefault().Text);
                    int id = Convert.ToInt32(grdIlKatsayiListe.DataKeys[row.DataItemIndex].Value);
                    drIlKatsayi = IlKatsayiListesi.IlKatsayi.NewIlKatsayiRow();

                    drIlKatsayi.Katsayi = katsayi;
                    drIlKatsayi.BaslamaTarihi = DateTime.Now;
                    drIlKatsayi.IlID = Convert.ToByte(id);
                    drIlKatsayi.SetBitisTarihiNull();
                    IlKatsayiListesi.IlKatsayi.AddIlKatsayiRow(drIlKatsayi);
                    ++eklenen;
                }
            }
            TanimlamaIsKurali oTanimlama = new TanimlamaIsKurali();
            FonksiyonSonuc<Boolean> oSonuc = oTanimlama.IlKatsayiKaydet((IlKatsayiDataSet)IlKatsayiListesi.GetChanges());
            if (oSonuc.HataVarMi)
            {
                IlKatsayiListesi.RejectChanges();
                throw new Exception(oSonuc.Hata);
            }
            IlKatsayiListesi.AcceptChanges();
            MesajGoster(Page, eklenen +"/"+eskiKatsayiBitir + " Kayıt Eklendi/Güncellendi.", MesajTipiEnum.Basari);
        }

    }
}
